// admin 模块的业务逻辑层
const md5 = require('md5')
const { loginDao, updateAdminDao } = require('../dao/adminDao')
const jwt = require("jsonwebtoken")
const { formatResponse } = require('../utils/tool')
const { ValidationError } = require('../utils/errors')

// 登录
module.exports.loginService = async function(loginInfo) {
    // 1. 对密码进行加密，方便后续和数据库比对
    loginInfo.loginPwd = md5(loginInfo.loginPwd)
    // 2. 将信息传递给数据库，进行比对
    let data = await loginDao(loginInfo)
    if(data && data.dataValues) {
        data = {
            id: data.dataValues.id,
            loginId: data.dataValues.loginId,
            name: data.dataValues.name
        }
        var loginPeriod = null
        // 如果设置了有效期，就按照有效期来，否认有效期默认为1天
        if(loginInfo.remember) {
            loginPeriod = parseInt(loginInfo.remember)
        }else {
            loginPeriod = 1
        }
        // 添加token
        const token = jwt.sign(data, md5(process.env.JWT_SECRET), { expiresIn: loginPeriod * 24 * 60 * 60 })
        return {
            token,
            data
        }
    }
    return { data }
}

// 更新
module.exports.updateAdminService = async function(accountInfo) {
    // 搜索是否有该用户
    const adminInfo = await loginDao({
        loginId: accountInfo.loginId,
        loginPwd: md5(accountInfo.oldLoginPwd)
    })
    // 如果可以查到已有的用户信息，则更新
    if(adminInfo && adminInfo.dataValues) {
        // 组建新的用户信息
        const newAccountInfo = {
            loginId: accountInfo.loginId,
            name: accountInfo.name,
            loginPwd: md5(accountInfo.loginPwd)       
        }
        // 更新数据库
        await updateAdminDao(newAccountInfo)
        return formatResponse(200, "admin信息修改成功", {
            "loginId": accountInfo.loginId,
            "name": accountInfo.name,
            "id": adminInfo.dataValues.id
        })
    }else {
        throw new ValidationError('旧密码不正确')
    }
}